iT邦幫忙

2021 iThome 鐵人賽

DAY 18
0
Software Development

Laravel 新手初見 API系列 第 18

Day18-Webhook 實作(番外篇)LINEBot 之 LINEBotTiny

  • 分享至 

  • xImage
  •  

大家好~
這幾天應該對 line-bot-sdk-php 有了一些初淺的認識啦~
不過在 line-bot-sdk-phpREADME.md 上有提到的 line-bot-sdk-tiny 一直都沒介紹到,
今天就來看一下 line-bot-sdk-tiny 吧!

前言

下面這段話是 line-bot-sdk-phpREADME.md 上的一段簡介:

A very simple SDK (subset) for the LINE Messaging API for PHP. line-bot-sdk-tiny provides a simple interface and functions which makes it a good way to learn how to use the LINE Messaging API.

相對於原本 line-bot-sdk-php 實作的那些功能,
line-bot-sdk-tiny 真的是 simple 非常多!

line-bot-sdk-tiny

今天用 line-bot-sdk-tiny 實作 Flex Message,
順便看一下 line-bot-sdk-tiny
原始碼的部分就不太會貼上來啦,
這邊附上 GitHub 的連結,
如果已經下載過了,
也可以從以下路徑中找到檔案喔~
vendor/linecorp/line-bot-sdk/line-bot-sdk-tiny/LINEBotTiny.php

那就先從 parseEvents() 開始吧!

parseEvents()

parseEvents() 會幫我們對 Request 做哪些檢查呢?

  • 檢查 HTTP request method
  • 檢查 Request body 是否為空
  • 檢查簽名
  • 檢查 Request body 的 events property

replyMessage($message)

主要是在設定回傳訊息時 Request 的 HTTP header 與 API URL ,
Channel access token 也會被放入 header 的 Authorization 內。
也會幫我們把要回傳訊息的內容轉成 JSON 喔~

sign($body)


LINE Messaging API 簽名的產生方式是用 sha256 與 Channel secret 對 Request body 進行加密後,
輸出二進位的結果,
再用 base64 做編碼。

實作篇

$linebotTiny = new LINEBotTiny(
    env('LINE_BOT_CHANNEL_ACCESS_TOKEN'),
    env('LINE_BOT_CHANNEL_SECRET')
);
$event = $linebotTiny->parseEvents();
$replyToken = $event[0]['replyToken'];

$flexContent = 'Flex message content...';

$linebotTiny->replyMessage([
    'replyToken' => $replyToken,
    'messages' => [
        [
            'type' => 'flex',
            'altText' => 'this is a flex message',
            'contents' => $flexMessageContent
        ]
    ]
]);

return response('HTTP_OK', Response::HTTP_OK);

範例中的變數 $flexMessageContent 就是 PHP Array 格式的 Flex Message,
但因為內容過長,
就不放上來佔版面啦,
先用一段字串示意一下。

成果預覽:

小結

  1. Channel access token 是用來放在 header 的 Authorization 內的。
  2. Channel secret 用來生成簽名。
  3. 只要將 Flex Message 的模板設計好後,再把 JSON 轉成 PHP Array 就可以直接使用啦~

會發這篇主要是因為昨天使用 Flex Message 時,
感覺到 line-bot-sdk-php 的不便之處...
FLEX MESSAGE SIMULATOR 上設計好模板後,
還要用符合 FlexMessageBuilder 要求的方式將剛剛設計好模板實作出來,
對我而言使用起來不是那麼的便利...
所以想說分享一下 line-bot-sdk-tiny

由於 line-bot-sdk-tiny 原始碼不多,
但 LINE Messaging API 的基本功能他都具有,
所以從 line-bot-sdk-tiny 開始認識 LINE Messaging API,
也是種不錯的方式吧~

大家明天見啦~
若文章有任何問題,
還請大家不吝賜教!


上一篇
Day17-Webhook 實作(六)LINEBot 之 MessageBuilder(IV)
下一篇
Day19-部署篇(一)Amazon EC2
系列文
Laravel 新手初見 API30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
jon849
iT邦新手 5 級 ‧ 2023-01-30 00:24:33

想請教一下你是如何在laravel裡引入line-bot-sdk-tiny的呢?

我試著到composer.lock把 line-bot-sdk-tiny 加到autoload (如圖)
https://ithelp.ithome.com.tw/upload/images/20230130/20157278cMJGuhNCW0.png
再到controller引入(use LINEBotTiny) 卻還是顯示Class 'LINEBotTiny' not found

我要留言

立即登入留言